using System;
using System.Collections.Generic;
using System.Linq;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace SWGeneracionE.Models
{
    public partial class ParticipanteXEvento
    {
        public int idParticipanteXEvento { get; set; }
        public int idParticipante { get; set; }
        public int idEvento { get; set; }
        public System.DateTime fechaInscripcion { get; set; }
        public Nullable<System.DateTime> fechaInscripcionR { get; set; }
        public short estado { get; set; }
        public string codigo { get; set; }
        public Nullable<short> tipoTransporte { get; set; }
        public string marcaVehiculo { get; set; }
        public string placaVehiculo { get; set; }
        public string colorVehiculo { get; set; }
        public Nullable<bool> duenioVehiculo { get; set; }
        public bool contrato { get; set; }
        public bool recaudacionS { get; set; }
        public bool cortesia { get; set; }
        public Nullable<int> idTutor { get; set; }
        public Nullable<bool> cartaTutor { get; set; }
        public Nullable<bool> firmaPadre { get; set; }
        public Nullable<bool> firmaMadre { get; set; }
        public string observaciones { get; set; }
        public string observacionesR { get; set; }
        public Nullable<bool> checkin { get; set; }

        public virtual ICollection<AsignacionGrupo> AsignacionGrupo { get; set; }
        public virtual Evento Evento { get; set; }
        public virtual ICollection<Pago> Pago { get; set; }
        public virtual Participante Participante { get; set; }
        public virtual ICollection<ParticipanteXEvento> Menores { get; set; }
        public virtual ParticipanteXEvento Tutor { get; set; }
        public virtual ICollection<Recaudacion> Recaudacion { get; set; }
        public virtual ICollection<Transferencia> Debitos { get; set; }
        public virtual ICollection<Transferencia> Creditos { get; set; }
        public virtual ICollection<BusParticipante> BusParticipante { get; set; }

        /*propiedades adicionales*/
        public decimal AbonoTotalLOC
        {
            get
            {
                if (Pago != null)
                {
                    var totalPago = Pago.Where(p =>
                                ((p.Movimiento == null) || (p.Movimiento.idMotivo == Constantes.MOTIVODEPOSITO_EVENTO))
                                && (p.estado == Constantes.ESTADOPAGO_AUTORIZADO)
                                && (p.montoLOC != null)).Sum(p => p.montoLOC);

                    return totalPago != null ? (decimal)totalPago : 0;
                }

                return 0;
            }
        }

        public decimal AbonoTotalUSD
        {
            get
            {
                if (Pago != null)
                {
                    var totalPago = Pago.Where(p =>
                                ((p.Movimiento == null) || (p.Movimiento.idMotivo == Constantes.MOTIVODEPOSITO_EVENTO))
                                && (p.estado == Constantes.ESTADOPAGO_AUTORIZADO)
                                && (p.montoUSD != null))
                                .Sum(p => p.montoUSD);

                    return totalPago != null ? (decimal)totalPago : 0;
                }

                return 0;
            }
        }

        public decimal RecaudacionTotal
        {
            get
            {
                if (Recaudacion != null)
                {
                    var totalRecaudacion = Recaudacion.Where(p =>
                                    (p.estado == Constantes.ESTADORECAUDACION_INGRESADO))
                                    .Sum(p => (decimal?)p.monto);

                    return totalRecaudacion != null ? (decimal)totalRecaudacion : 0;
                }

                return 0;
            }
        }

        public bool ValidarPagoBus
        {
            get
            {
                if (Pago != null)
                {
                    Pago pago = Pago.FirstOrDefault(p => (p.Movimiento != null)
                                            && (p.Movimiento.idMotivo == Constantes.MOTIVODEPOSITO_BUS)
                                            && (p.estado == Constantes.ESTADOPAGO_AUTORIZADO));
                    if (pago != null)
                        return true;
                }

                return false;
            }
        }
    }
}